<?php

require_once dirname(__FILE__) . '/../lib/becaGeneratorConfiguration.class.php';
require_once dirname(__FILE__) . '/../lib/becaGeneratorHelper.class.php';

/**
 * beca actions.
 *
 * @package    BecArTe
 * @subpackage beca
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class becaActions extends autoBecaActions {

    //el aspirante puede ver las becas disponibles para solicitarlas
    public function executeBecasDisponibles(sfWebRequest $request) {
        $this->categorias = Doctrine_Core::getTable('categoria')->getCategoriasConBecasEnInscripcion();
        if (!count($this->categorias))
            $this->getUser()->setFlash('notice', 'No hay becas disponibles.', false);
    }

    //el aspirante solicita una beca pasando su id
    public function executeSolicitar(sfWebRequest $request) {
        $alu = $this->getUser()->getAlumnoId();
        $aviso = '';
        if ($beca = $this->getRoute()->getObject()) {
            $solicitud = new Solicitud();
            $solicitud->setAlumnoId($alu);
            $solicitud->setBeca($beca);
            $form = new SolicitudForm($solicitud);
            unset($form['_csrf_token']);
            $form->bind(array(
                'alumno_id' => $alu,
                'beca_id' => $beca->getId()
            ));
            if ($form->isValid()) {
                try {
                    $form->save();
                } catch (Exception $e) {
                    $aviso = 'No pudo crearse la solicitud.' . $e->getMessage();
                }
            } else {
                foreach ($form->getFormFieldSchema() as $field)
                    if ($field->hasError()) {
                        $aviso .= $field->getError();
                    }
            }
        } else {
            $aviso = 'Debe seleccionar una beca.';
        }

        if ($aviso) {
            $this->getUser()->setFlash('error', $aviso);
            $this->redirect('becas_disponibles');
        } else {
            $this->getUser()->setFlash('notice', 'La solicitud fue correctamente creada.');
            $this->redirect('solicitud_edit', array('id' => $solicitud->getId()));
        }
    }

    public function executeDelete(sfWebRequest $request) {
        try {
            parent::executeDelete($request);
        } catch (Exception $e) {
            if ($e->getMessage())
                $this->getUser()->setFlash('error', $e->getMessage());
            $this->redirect('@beca');
        }
    }

    public function executeEdit(sfWebRequest $request) {
        parent::executeEdit($request);
        $notice = "";
        if ($this->beca->enPeriodoDeInscripcion()) {
            $this->getUser()->addFlashMessage('Actualmente en período de inscripción.');
        } elseif ($this->beca->enPeriodoDeVigencia()) {
            $this->getUser()->addFlashMessage('Actualmente en período de vigencia.');
        } elseif ($this->beca->estaFinalizada()) {
            $this->getUser()->addFlashMessage('Beca ya finalizada.');
        }
        if ($this->beca->getSolicitudes()->count()) {
            $this->getUser()->addFlashMessage(sprintf('Hay %d solicitud/es asociada/s.', $this->beca->getSolicitudes()->count()));
        }
    }

    public function executeListShow(sfWebRequest $request) {
        $this->beca = $this->getRoute()->getObject();
    }

    public function executeOtorgar(sfWebRequest $request) {
        $this->beca = $this->getRoute()->getObject();
        if (!$this->beca->getGeneroInforme()) {
            $this->getUser()->setFlash(
                    'error', 'Sólo puede otorgar becas actuales, si emite antes el informe para el Consejo.'
            );
            $this->redirect('beca');
        } elseif ($this->seleccionados = $request->getParameter('ids')) {
            try {
                $this->beca->otorgarBecas($this->seleccionados);
                $this->getUser()->setFlash('notice', 'Se otorgaron ' . count($this->seleccionados) . ' becas.', true);
                $this->redirect('beca_otorgada');
            } catch (Exception $e) {
                $this->getUser()->setFlash('error', $e->getMessage(), false);
            }
        } else {
            $this->seleccionados = array();
        }
    }

    public function executeGenerarInforme(sfWebRequest $request) {
        $beca = $this->getRoute()->getObject();
        if ($beca->enPeriodoDeInscripcion()) {
            $this->getUser()->setFlash("error", "No finalizó el período de inscripción a la beca.");
            $this->redirect('beca');
        } elseif ($beca->haySolicitudesEnPresentacion()) {
            $this->getUser()->setFlash("error", "Aún solicitudes en presentación. Es posible que queden requisitos por validar.");
            $this->redirect('beca');
        } else {

            $this->redirect('informes/informeConsejo?id=' . $beca->getId()); //Se setea como finalizada en informes/informesConsejp
        }
    }

}
